import Vue from 'vue'

// https://qiankun.umijs.org/zh/faq/#%E5%A6%82%E4%BD%95%E7%8B%AC%E7%AB%8B%E8%BF%90%E8%A1%8C%E5%BE%AE%E5%BA%94%E7%94%A8%EF%BC%9F
// 有些时候我们希望直接启动微应用从而更方便的开发调试，你可以使用这个全局变量来区分当前是否运行在 qiankun 的主应用的上下文中：
// if (!window.__POWERED_BY_QIANKUN__) {}
// 虽然没有应用上面说的这个特性，但也支持独立访问
//自定义一些微前端属性
// 主应用中使用
// force 强制安装
export function installMfe(force) {
    // 单机运行不安装
    if(process.env.VUE_APP_PORTALONE == 'true'){
        return
    }
    if(window.mfe){
        if (!force) {
            return
        }
    }
// 设置微前端模式
    window.mfe = true

// 微前端事件总线
    window.mfe_vue_bus = new Vue()
    window.mfe_mount_delay = 100
    // 默认导航项目路由的基础路径，这里加这个是因为暂时common-nav项目添加了路由，导致导航项目再加载三方项目时必须要以导航项目的路由基础路径开始，否则路由切换时不会渲染导航项目
    // 使用方式就是在子应用的路由中拼接上这个路径，作为路径的基础路径
    // 默认portal项目和导航项目都设置为根路径，这里默认空
    // 如果要修改该值，请在调用方法后再次赋值
    // 属性为每个项目的key对应的base path 如：{portal:'/portal',commonNav:'/common-nav'}
    window.mfe_nav_router_base_path = {}
}
// 挂载应用，如果第一时间没有dom延迟再试
// 子应用中使用
// 尝试次数times
export function tryMount(containerId,instance,times) {
    if(times == null || times == undefined){
        tryMount(containerId,instance,1)
    }else if (times >= 0){

        // 如果dom存在直接挂载
        if(document.getElementById(containerId)){
            instance.$mount('#' + containerId)
        }else {
            // 如果dom不存在延迟一秒再挂载，因为该项目依赖common-nav导航，确保导航项目已正确渲染
            setTimeout(function () {
                tryMount(containerId,instance,times - 1)
            },window.mfe_mount_delay)
        }
    }


}
// 子应用激活的规则，当前只支持history模式
// 子应用中使用
export function genActiveRule(routerPrefix) {
    return (location) => location.pathname.startsWith(routerPrefix);
}